package com.ggs.rg.ybjb.adminmodule.handle;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * ClassName:MyMetaObjectHandler
 * Package:com.ggs.rg.handler
 * Description:
 *
 * @Date:2021/8/3 14:32
 * @Author:cxw
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{



    @Override
    public void insertFill(MetaObject metaObject) {

        log.info("start insert fill ....");
        /**
         * setFieldValByName()是父接口中的默认方法,用字段名字通过反射设置待插入对象中指定名字字段的值
         * 参数一  字段名，写pojo类的属性名（我的理解是先给pojo的属性赋值，然后再插入数据库，所以写的是属性名不是数据库字段名）
         * 参数二  要赋的值
         * 参数三  实现方法时自动传进来的metaObject这个参数
         *         metaObject这个对象表示我们要赋值的pojo对象(Sellers)
         */

        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);

        /**
         * 这是官方提供的自动填充的几个方法，但我用了都没用，不知道为什么，可能是填充字段初始值不能为null,最后用的是狂神教的
         * this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
         * // 或者
         * this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
         * // 或者
         * this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
         */

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill.....");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
